#include "OMIT_RandAccessSet.h"

template <typename T>
void OMIT_NAMESPACE::randAccessSet<T>::insert(T* e)
{
    assert(!contains(e));
    _dataMap.emplace(e, _dataVec.size());
    _dataVec.push_back(e);
}

template <typename T>
void OMIT_NAMESPACE::randAccessSet<T>::erase(T* e)
{
    auto target = _dataMap.find(e);
    assert(target != _dataMap.end());
    auto idx = target->second;
    if (idx != _dataVec.size() - 1)
    {
        _dataMap[_dataVec.back()] = idx;
        _dataVec[idx] = _dataVec.back();
    }
    _dataVec.pop_back();
    _dataMap.erase(target);
}
